Networks enable computers and other devices to communicate. For example, networks can carry data representing video, audio, e-mail, and so forth. Typically, data sent across a network is divided into smaller messages known as Protocol Data Units (PDUs). By analogy, a PDU is much like an envelope you drop in a mailbox. The letter inside the envelope is like the PDUs “payload” while the envelope itself is like the “header” information added to the payload to help network devices handle the PDU appropriately. A given PDU may “hop” across many different intermediate network devices, known as “routers” or “bridges”, before reaching its destination.
Devices vary in the way they process PDUs based on the networking technology being used and the role the device plays within a networking scheme. For example, routers often perform operations that include PDU classification and forwarding. For instance, based on a Quality of Service (QoS) classification, a router may forward a given IP datagram ahead of datagrams with lesser priority.
Many PDU processing operations may be handled by software. To program these operations, programmers can write source code in a computer language. For example, a “C” programmer may write an instruction of:                PDU.TimeToLive=PDU.TimeToLive−1;to decrement a “TimeToLive” counter that limits how many “hops” a PDU may make before expiring. While a person can intuitively understand the source code, ultimately, the source code must be translated into the more cryptic instructions that a processor executes.        
A tool known as a compiler can handle the task of translating instructions written in a source language into instructions for a target instruction set. For example, a programmer can use a compiler to translate the source code above into processor executable instructions. A compilation process can also “preprocess” source code by replacing source code instructions with other source code instructions.